
// var m = `test 
// new line 
// new line`
// console.log(m)

// var age = 50

// // 顺序标记判断
// if (age > 100) {
//     console.log('age large 100')
// } else if (age > 60) {
//     console.log('知天命')
// } else if (age > 40) {
//     console.log('不惑之年')
// } else {
//     console.log('too yung')
// }

// var sum = 0
// for (i=0;i<=100;i++) {
//     sum+=i
// }
// console.log(`total: ${sum}`)

// var person = {
//     name: 'Jack',
//     age: 20,
//     city: 'Beijing'
// };

// // Object Map  Object.attr  Object[attr]
// for (attr in person) {
//     console.log(person[attr])
// }

// var array01 = ['a', 'b', 'c']
// for (let i in array01) {
//     console.log(array01[i])
// }

// array01.name = 'array01'
// for (let i in array01) {
//     console.log(array01[i])
// }

// for (let v of array01) {
//     console.log(v)
// }

// for (let v of Object.keys(person)) {
//     console.log(v, person[v])
// }

// // 完整体写法
// array01.forEach(function(item) {
//     console.log(item)
// })

// // 并发的 map  操作
// array01.forEach(item => {
//     console.log(item)
// })


// function callback() {
//     console.log('Done');
// }

// console.log('before setTimeout()');
// setTimeout(callback, 1000); // 1秒钟后调用callback函数, Js没有sleep
// console.log('after setTimeout()');

function testResultCallbackFunc(resolve, reject) {
    var timeOut = Math.random() * 2;
    console.log('set timeout to: ' + timeOut + ' seconds.');

    // 业务处理逻辑
    var fn =  () => {
        if (timeOut < 1) {
            console.log('call resolve()...');
            resolve('200 OK');
        }
        else {
            console.log('call reject()...');
            reject('timeout in ' + timeOut + ' seconds.');
        }
    }

    setTimeout(fn, timeOut * 1000);
}


// 使用回调使用的异步编程
// onSuccess = (data) => {
//     console.log(data)
// }
// onFailed = (error) => {
//     console.log(error)
// }
// testResultCallbackFunc(onSuccess, onFailed)


// var p1 = new Promise(testResultCallbackFunc)
// p1.then(data => {
//     console.log(data)
// }).catch(err => {
//     console.log(err)
// })

async function testWithAsync() {
    var p1 = new Promise(testResultCallbackFunc)
    // then() catch()

    // 基于同步模式来编写异步代码
    try {
        //  await， 交出了执行权, 实现了同步的逻辑
        var resp = await p1
        console.log(resp)
    } catch (err) {
        console.log(err)
    }
}

testWithAsync()
